package dd.mm.ee;

import org.junit.Test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * Created by Admin on 12/31 0031.
 */
public class StringTest {
    /**
     * ①字符串中包含的字符数,也就是字符串的长度;
     * int length();获取长度
     * ②根据位置获取位置上的某个字符;
     * char charAt(int index);获取某一位上的字符
     * ③根据字符获取他在字符串中的位置,没有找到 返回 -1 ;
     * int indexOf(int ch):返回的是ch字符在字符串中第一次出现的位置
     * int indexOf(int ch,int fromIndex):从fromIndex指定位置开始,
     * 获取ch在字符串中第一次出现的位置;
     * <p>
     * int indexOf(String str):返回的是str在字符串中第一次出现的位置
     * int indexOf(String str,int fromIndex):从fromIndex指定位置开始,
     * 获取str在字符串中第一次出现的位置;
     * <p>
     * int lastIndexOf(int ch):返回的是ch字符在字符串中最后一次出现的位置
     * int lastIndexOf(int ch,int fromIndex):从fromIndex指定位置开始,
     * 获取ch在字符串中最后一次出现的位置;
     * <p>
     * int lastIndexOf(String str):返回的是str在字符串中最后一次出现的位置
     * int lastIndexOf(String str,int fromIndex):从fromIndex指定位置开始,
     * 获取str在字符串中最后一次出现的位置;
     */
    @Test
    public void test() {
        String s = "123/4wer/wer23/13zxczx";
        int length = s.length();
        char value = s.charAt(3);
        int q = s.indexOf("e");
        int w = s.lastIndexOf("23");
        int e = s.lastIndexOf("3");
        boolean r = s.contains("5");
        boolean t = s.isEmpty();
        char[] y = s.toCharArray();
        byte[] u = s.getBytes();
        String[] i = s.split("/");//一般配合StringBuffer使用
        System.out.println(length);//22
        System.out.println(value);///
        System.out.println(q);//6
        System.out.println(w);//12
        System.out.println(e);//16
        System.out.println(r);//false
        System.out.println(t);//false
        for (char c : y) {
            System.out.print(c);//123/4wer/wer23/13zxczx
        }
        for (byte b : u) {
            System.out.print(b);//495051475211910111447119101114505147495112212099122120123
        }
        for (String s1 : i) {
            System.out.println(s1);//4wer
            //wer23
            // 13zxczx
        }
    }

    @Test
    public void test1(){
        String ss="12312/werwe/4646/dfg/cvb/57656/qw/23/dfd";
        StringBuilder stringBuilder=new StringBuilder();
        stringBuilder.append("qwe")
                     .append("123")
                     .append("45645")
                     .insert(2,"pppp")
                     .reverse();
        System.out.println(stringBuilder);
    }

    @Test
    public void test2() throws Exception {
        //通过 类名.class 方法,可以创建Class 的实例
        Class<Student> clazz=Student.class;
        //创建 clazz 对应的运行时类
        Student student=clazz.newInstance();
        //获取成员变量
        Field field=clazz.getField("name");
        Field field1=clazz.getField("age");
        field.set(student,"Liming");
        field1.set(student,"12");
        System.out.println(student);
        Method method=clazz.getMethod("show");
        method.invoke(student);
        Student s=new Student();
        System.out.println(s.getClass().getName());//通过运行时类的对象 s ;调用getClass() 方法,返回运行时类 Student
        System.out.println(Student.class);
        System.out.println(Student.class==s.getClass());
/**
 * Class: 是反射的源头;
 * 我们创建了一个类,通过编译生成对应的.class 文件;之后jvm 加载 .class文件;;
 * 该文件加载到内存中以后,就是一个运行时类;
 *
 * 1.每一个运行时类只加载一次;
 * 2.有了Class 的实例以后,我们就可以进行一下操作;
 *  .创建对应的运行时类的对象;
 *  .获取运行时类中的完整结构;
 *  .调用运行时类的指定的结构;方法,属性,构造器
 *  . 反射的应用: 动态代理;
 */

    }

    /**
     * 如何获取Class 的实例 (3种)
     * 1.通过运行时类.class      Student.class
     * 2.通过运行时 类的对象.getClass();   s.getClass()
     * 3.通过Class 中的静态方法 Class.forName(运行时类的路径);
     */

    @Test
    public void test3() throws Exception {
        String className="dd.mm.ee.Student";
        Class clazz=Class.forName(className);
        Object object=clazz.newInstance();

//        Person p = (Person) object;
        Student student= (Student) object;
//        System.out.println(p);
        System.out.println(student);

        Field file=clazz.getDeclaredField("name");
        Field file1=clazz.getField("age");
        System.out.println(file1);
        System.out.println(file1.getName());
        System.out.println("----: "+file1.getType());
        String s=file.getType().getSimpleName();
        System.out.println(s);

    }


}
